import axios from 'axios'

export default {
  namespaced: true,
  state() {
    return {
      list: []
    }
  },
  mutations: {
    updateList(state, payload) {
      state.list = payload
    },
    updateCount(state, payload) {
      // console.log(payload);
      const goods = state.list.find((item) => item.id === payload.id)
      // console.log(goods);
      goods.count = payload.newCount
    }
  },
  actions: {
    async getList(ctx) {
      const res = await axios.get('http://localhost:3000/cart')
      // console.log(res.data);
      ctx.commit('updateList', res.data)
    },
    // 请求方式：patch
    // 请求地址：http://localhost:3000/cart/:id值  表示修改的是哪个对象
    // 请求参数：
    // {
    //   name: '新值',  【可选】
    //   price: '新值', 【可选】
    //   count: '新值', 【可选】
    //   thumb: '新值'  【可选】
    // }
    async updateCountAsync(context, obj) {
      // console.log(obj);
      // 将修改更新同步到后台服务器
      await axios.patch(`http://localhost:3000/cart/${obj.id}`, {
        count: obj.newCount
      })

      // 将修改更新同步到 vuex
      context.commit('updateCount', {
        id: obj.id,
        newCount: obj.newCount
      })
    }
  },
  getters: {
    total(state) {
      return state.list.reduce((p, c) => p + c.count, 0);
    },
    totalPrice(state) {
      return state.list.reduce((p, c) => p + c.count * c.price, 0);
    },
  },
}